/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package propres;

/**
 *
 * @author david
 */
import java.io.Serializable;
import java.util.*;

public class dia implements Serializable  {

   Date fecha;
   private List<plato>[] horario;

public dia(Date d){
horario = new ArrayList[5];
for(int i=0;i<5;i++){
    List<plato> a=new ArrayList<plato>();
    horario[i]=a;
}
fecha=d;
}

public dia(){
    horario = new ArrayList[5];
for(int i=0;i<5;i++){
    List<plato> a=new ArrayList<plato>();
    horario[i]=a;
}
}

public void Set_fecha(Date d){
fecha=d;
}
public Date fecha(){
Date d=fecha;
return d;
}

public void anadir_plato( plato p, int comida) //plato tendria que ser un puntero //comida <5
{
    plato p1=new plato();
    p1.copiar_plato(p);
  horario[comida].add(p1); 
}
public void anadir_comida( List<plato> p, int comida) //plato tendria que ser un puntero //comida <5
{
    Iterator it=p.iterator();
    int n=0;
    while(it.hasNext()){
  horario[comida].add(p.get(n));
     n++;
    it.next();
    }
}
///PODRIAMOS LLAMARLA PAGAR_PLATO--------------------------
 public boolean pagar_dia(String nom, int comida){//nos retornara cierto si se ha pagado el plato, si estubiera pagado nos retorna falso
 boolean acaba=true;int i=0;
 String nomp=new String();
 plato po=new plato();
 Iterator it = horario[comida].iterator();
 while (it.hasNext() && acaba){
			  po=horario[comida].get(i);
                          nomp=po.Get_Nombre();
			if(nom.equals(nomp)){ 
                            if(!po.Get_pagado()){
                            acaba=false;
                            po.Set_pagado();
			  horario[comida].set(i,po);
                            }
                        }
          it.next();
 i++;}
 return !acaba;
 }
 public int[] tcomidas(){
  int[] com= new int[5];
  com[0]=lplatos_comida(0).size();
  com[1]=lplatos_comida(1).size();
  com[2]=lplatos_comida(2).size();
  com[3]=lplatos_comida(3).size();
  com[4]=lplatos_comida(4).size();
  
  return com;
 }
 public boolean  compare_comidas(dia de){
     boolean b=true;
     int d1[]=tcomidas();
     int d2[]=de.tcomidas();
     if(d1[0]!=d2[0]){b=false;}
     if(d1[1]!=d2[1]){b=false;}
     if(d1[2]!=d2[2]){b=false;}
     if(d1[3]!=d2[3]){b=false;}
     if(d1[4]!=d2[4]){b=false;}
     
     return b;
 }
 int ntbit(int[] tbit ){
     int n= tbit[0]+tbit[1]+tbit[2]+tbit[3]+tbit[4];
     return n;
     
 }
 
 public boolean  compare_tcomidas(int[] tbit){
     boolean b=true;
     int d1[]=tcomidas();
     if(d1[0]!=tbit[0]){b=false;}
     if(d1[1]!=tbit[1]){b=false;}
     if(d1[2]!=tbit[2]){b=false;}
     if(d1[3]!=tbit[3]){b=false;}
     if(d1[4]!=tbit[4]){b=false;}
     
     return b;
 }
 public String pagar_comida(int comida)
 {
    int i=0;
    String estado_comida="ya pagado";//NUEVO
    plato po=new plato();
    Iterator it = horario[comida].iterator();
    
    while (it.hasNext())
    {
        po=horario[comida].get(i);
        if(!po.Get_pagado())
        {
              po.Set_pagado();//sino llamamos a pagar_dia(nombre,com) nos evitamos otra busqueda
              estado_comida="pagado";//NUEVO
              horario[comida].set(i,po);
        } 
        it.next();
        i++;
    }
    return estado_comida;
 }
  public void pagar_dia(List<Date> ldias,List<String> lcomidas){
 plato po=new plato();
 for(int a=0;a<5;a++){
     int i=0;
 Iterator it = horario[a].iterator();
 while (it.hasNext()){
           po=horario[a].get(i);
           if(!po.Get_pagado()){
             po.Set_pagado();//si no llamamos a pagar_dia(nombre,com) nos evitamos otra busqueda

//PARTE NUEVA
             
             ldias.add(this.fecha);
             if(a==0)lcomidas.add("desayuno");
             else if(a==1)lcomidas.add("almuerzo");
             else if(a==2)lcomidas.add("merienda");
             else if(a==3)lcomidas.add("cena");
             else if(a==4)lcomidas.add("resopo");
//FIN PARTE NUEVA
             horario[a].set(i,po);
           }
          it.next();
 i++;}
 }
 
 }
public boolean modificar_plato( plato p, int comida){//comida <5

int i= 0;boolean acaba=true ;plato po = new plato();
if(horario[comida].contains(p)){
 while ( acaba){
	po=horario[comida].get(i);
	if(po.equals(p)){ acaba=false;
	  horario[comida].set(i,p);
        }
 i++;}
}

 return !acaba;
 }

public void borrar_comida(int com){ //nos elimina la comida com
horario[com] =new ArrayList<plato>();
}

public boolean elim_plato(plato p, int com){ //si no ncuentra plato nos devuelve false
boolean acaba=horario[com].remove(p);
 return acaba;
}
public List<plato> lplatos_dia(){//pude retornar una lista nula
List<plato> list = new ArrayList();
for(int i=0;i<5;i++){
    if(!horario[i].isEmpty()){    
     list.addAll(horario[i]);
    }
}
return list;
}

public List<plato> lplatos_comida(int com){
List<plato> list = new ArrayList();
    if(!horario[com].isEmpty()){
       list.addAll(horario[com]);
    }
return list;
}
public boolean equals( Object arg ) {
		
        if( (arg != null) && (arg instanceof dia) ) {
			// Hacemos un moldeado del Object general a tipo java511
            dia temp = (dia)arg;
			// Se realiza la comparacion y se devuelve el resultado
            return( horario[0].equals( temp.horario[0]) && horario[1].equals( temp.horario[1]) && horario[2].equals( temp.horario[2]) && horario[3].equals( temp.horario[3]) && horario[4].equals( temp.horario[4]) );
            }
		else {
			System.out.println("tipos incompatibles dia");
		    return( false );
		    }
        }
public int comparar_dia(dia b,preferencias c)
{
    if(c==null){
// Dadas dos dietas a y b decidimos si la dieta a es mejor que la dieta b, es decir
// se ajusta más a las preferencias del cliente.
int cal=0;
int prec=0;
int resultat;
/*int c1=calorias-c.consultar_preferencias().Get_calorias().Get_C_total();
int c2=b.calorias-c.consultar_preferencias().Get_calorias().Get_C_total();
int p1=precio-c.consultar_preferencias().Get_precio().Get_P_total();
int p2= b.precio-c.consultar_preferencias().Get_precio().Get_P_total();*/
int c1=calcular_cal()-c.consultar_preferencias().Get_calorias().Get_C_total();
int c2=b.calcular_cal()-c.consultar_preferencias().Get_calorias().Get_C_total();
int p1=calcular_prec()-c.consultar_preferencias().Get_precio().Get_P_total();
int p2= b.calcular_prec()-c.consultar_preferencias().Get_precio().Get_P_total();
if(c1<0){c1=c1*(-1);}
if(c2<0){c2=c2*(-1);}
if(p1<0){p1=p1*(-1);}
if(p2<0){p2=p2*(-1);}
c1=c1+p1;
c2=c2+p2;

return c1-c2;   }
    else{
        return 0;
    }
}
public  int calcular_cal(){

    List<plato> l1=new ArrayList();
    l1=lplatos_dia();
    Iterator et =l1.iterator();
    int i=0;
    int cal=0;
    while(et.hasNext()){
       cal+=l1.get(i).Get_Calorias(); 
      // precio+=l1.get(i).Get_Precio();
        et.next();
        i++;
    }
    return cal;
    
   
}
public  int calcular_prec(){

    List<plato> l1=new ArrayList();
    l1=lplatos_dia();
    Iterator et =l1.iterator();
    int i=0;
    int prec=0;
    while(et.hasNext()){
     
       prec+=l1.get(i).Get_Precio();
        et.next();
        i++;
    }
    return prec;
   
}

    
}
